package chess;

/**
 * 将
 * 负责人:黄兴
 */

public class General extends Piece{

    public General(int id, String name, int blood, int category, int camp) {
        super(id, name, blood, category, camp);
    }

    @Override
    public boolean isMove(Piece[][] chessBoard, int x1, int y1, int x, int y) {
        if (x1 < 1 || x1 > 4 || y1 < 1 || y1 > 8) {
            System.out.println("棋子不能移动出棋盘！");
            return false;
        }

        if (x == x1 && y == y1){
            System.out.println("请移动坐标");
            return false;
        }

        int n, m;//上下左右移动格数；
        n = x - x1;
        m = y - y1;

        int count = 0;//判断是否违规

        if (n == 1 || n == -1) {//左右移动一格
            if(m == 0){//上下没有移动
                count++;
            }
        }
        if (m == 1 || m == -1) {//上下移动一格
            if(n == 0){//左右没有移动
                count++;
            }
        }
        if (count != 1) {
            System.out.println("棋子只能上下左右移动一格！");
            return false;
        }

        if (chessBoard[x1 - 1][y1 - 1].getName().equals("　")) {//移动位置为空格子
            return true;
        }else if(chessBoard[x1 - 1][y1 - 1].getName().equals("〇")){//移动位置棋子未翻开
            System.out.println("不能移动到未翻开的棋子上！");
            return false;
        } else {//棋子为敌方或我方
            if(chessBoard[x1 - 1][y1 - 1].getCamp() == 1){//camp = 1为自己的棋子
                System.out.println("不能移动到自己的棋子上！");
                return false;
            }else {//敌方棋子
                if (chessBoard[x1 - 1][y1 - 1].getCategory() <= 7 && chessBoard[x1 - 1][y1 - 1].getCategory() != 1) {
                    //扣除敌方血量
                    return true;
                }
                if (chessBoard[x1 - 1][y1 - 1].getCategory() != 1){
                    System.out.println("将不能吃兵!");
                    return false;
                }
            }
        }
        return false;
    }

    @Override
    public boolean isComMoveX(Piece[][] chessBoard, int x1, int y1, int x, int y) {
        if (x1 + 1 < 0 || x1 + 1 > 4 || y1 < 0 || y1 > 8) {//i + 1
            return false;
        }else if (x1 - 1 < 0 || x1 - 1 > 4 || y1 < 0 || y1 > 8) {//i - 1
            return false;
        }

        if (chessBoard[x1][y1].getName().equals("　")) {//移动位置为空格子
            return false;
        }else if(chessBoard[x1][y1].getName().equals("〇")){//移动位置棋子未翻开
            return false;
        } else {//棋子为敌方或我方
            if(chessBoard[x1][y1].getCamp() == 2){
                return false;
            }else {//敌方棋子
                if (chessBoard[x1][y1].getCategory() <= 7 && chessBoard[x1][y1].getCategory() != 1) {
                    //扣除敌方血量
                    return true;
                }
                if (chessBoard[x1][y1].getCategory() != 1){
                    return false;
                }
            }
        }
        return false;
    }

    @Override
    public boolean isComMoveY(Piece[][] chessBoard, int x1, int y1, int x, int y) {
        if (x1 < 0 || x1 > 4 || y1 + 1 < 0 || y1 + 1 > 8) {//j + 1
            return false;
        }else if (x1 < 0 || x1 > 4 || y1 - 1 < 0 || y1 - 1 > 8) {//j - 1
            return false;
        }

        if (chessBoard[x1][y1].getName().equals("　")) {//移动位置为空格子
            return false;
        }else if(chessBoard[x1][y1].getName().equals("〇")){//移动位置棋子未翻开
            return false;
        } else {//棋子为敌方或我方
            if(chessBoard[x1][y1].getCamp() == 2){
                return false;
            }else {//敌方棋子
                if (chessBoard[x1][y1].getCategory() <= 7 && chessBoard[x1][y1].getCategory() != 1) {
                    //扣除敌方血量
                    return true;
                }
                if (chessBoard[x1][y1].getCategory() != 1){
                    return false;
                }
            }
        }
        return false;
    }
}
